home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / share / eselect / modules / profile.eselect < prev    next >
Text File  |  2006-04-12  |  4KB  |  153 lines

  1. # Copyright 1999-2005 Gentoo Foundation
  2. # Distributed under the terms of the GNU General Public License v2
  3. # $Id: profile.eselect 229 2005-10-18 11:58:42Z ka0ttic $
  4.  
  5. inherit portage
  6.  
  7. DESCRIPTION="Manage the /etc/make.profile symlink"
  8. MAINTAINER="ka0ttic@gentoo.org"
  9. SVN_DATE='$Date: 2005-10-18 12:58:42 +0100 (Tue, 18 Oct 2005) $'
  10. VERSION=$(svn_date_to_version "${SVN_DATE}")
  11.  
  12. # get a list of valid profiles
  13. find_targets() {
  14.     local arch p portdir=${1}
  15.     [[ -n "${portdir}" ]] || portdir=$(portageq portdir)
  16.  
  17.     arch=$(arch)
  18.     [[ -z "${arch}" ]] && return 1
  19.  
  20.     for p in $(sed -n -e "s|^${arch}[[:space:]]\+\([^[:space:]]\+\).*$|\1|p" \
  21.         ${ROOT}/${portdir}/profiles/profiles.desc)
  22.     do
  23.         echo ${p}
  24.     done
  25. }
  26.  
  27. # remove make.profile symlink
  28. remove_symlink() {
  29.     rm "${ROOT}/etc/make.profile"
  30. }
  31.  
  32. # set the make.profile symlink
  33. set_symlink() {
  34.     local portdir=$(portageq portdir) target=${1} targets
  35.     if is_number "${target}" ; then
  36.         targets=( $(find_targets "${portdir}") )
  37.         [[ -z "${targets}" ]] && die -q "Failed to get a list of valid profiles"
  38.         target=${targets[$(( ${target} - 1 ))]}
  39.     elif [[ -n "${target}" && -d "${ROOT}/${portdir}/profiles/${target}" ]]
  40.     then
  41.         local arch parch
  42.  
  43.         # if the profile was explicitly specified (rather than a number)
  44.         # double check and make sure it's valid
  45.         arch=$(arch)
  46.         [[ -z "${arch}" && ${2} != "--force" ]] && return 1
  47.  
  48.         # do a reverse lookup and find the arch associated with ${target}
  49.         parch=$(sed -n -e "s|^\([[:alnum:]]\+\)[[:space:]].*${target}.*$|\1|p" \
  50.             ${ROOT}/${portdir}/profiles/profiles.desc)
  51.  
  52.         if [[ ${arch} != ${parch} && ${2} != "--force" ]] ; then
  53.             die -q "${target} is not a valid profile for ${arch}"
  54.         fi
  55.     fi
  56.  
  57.     if [[ -z ${target} ]] ; then
  58.         die -q "Target \"${1}\" doesn't appear to be valid!"
  59.     elif [[ -d "${ROOT}/${portdir}/profiles/${target}" ]] ; then
  60.         # we must call remove_symlink() here instead of calling
  61.         # it from do_set(), since if the link is removed, we
  62.         # cannot determine $ARCH in find_targets()
  63.         if [[ -L "${ROOT}/etc/make.profile" ]] ; then
  64.             remove_symlink || \
  65.                 die -q "Couldn't remove current make.profile symlink"
  66.         fi
  67.  
  68.         pushd "${ROOT}/etc" 1>/dev/null
  69.         ln -s "../${portdir}/profiles/${target}" "make.profile"
  70.         popd 1>/dev/null
  71.     else
  72.         die -q "Target \"${1}\" doesn't appear to be valid!"
  73.     fi
  74. }
  75.  
  76. ### show action ###
  77.  
  78. describe_show() {
  79.     echo "Show the current make.profile symlink"
  80. }
  81.  
  82. do_show() {
  83.     write_list_start "Current make.profile symlink:"
  84.     if [[ -L "${ROOT}/etc/make.profile" ]] ; then
  85.         local link=$(readlink ${ROOT}/etc/make.profile)
  86.         local portdir=$(portageq portdir)
  87.         link=${link##..${ROOT}/${portdir}/profiles/}
  88.         write_kv_list_entry "${link}" ""
  89.     else
  90.         write_kv_list_entry "(unset)" ""
  91.     fi
  92. }
  93.  
  94. ### list action ###
  95.  
  96. describe_list() {
  97.     echo "List available profile symlink targets"
  98. }
  99.  
  100. do_list() {
  101.     local active targets
  102.     targets=( $(find_targets) )
  103.  
  104.     [[ -z "${targets}" ]] && die -q "Failed to get a list of valid profiles"
  105.  
  106.     active=$(readlink ${ROOT}/etc/make.profile)
  107.     active=${active##*profiles/}
  108.     if [[ -n ${targets[@]} ]] ; then
  109.         local i
  110.         for (( i = 0 ; i < ${#targets[@]} ; i = i + 1 )) ; do
  111.             [[ ${targets[${i}]} == ${active} ]] \
  112.                 && targets[${i}]="${targets[${i}]} $(highlight '*' )"
  113.         done
  114.     fi
  115.     write_list_start "Available profile symlink targets:"
  116.     write_numbered_list "${targets[@]}"
  117. }
  118.  
  119. ### set action ###
  120.  
  121. describe_set() {
  122.     echo "Set a new profile symlink target"
  123. }
  124.  
  125. describe_set_parameters() {
  126.     echo "<target>"
  127. }
  128.  
  129. describe_set_options() {
  130.     echo "target : Target name or number (from 'list' action)"
  131.     echo "--force : Forcibly set the symlink"
  132. }
  133.  
  134. do_set() {
  135.     local force
  136.  
  137.     if [[ ${1} == "--force" ]] ; then
  138.         force=${1}
  139.         shift
  140.     fi
  141.  
  142.     if [[ -z ${1} ]] ; then
  143.         die -q "You didn't tell me what to set the symlink to"
  144.     elif [[ -e "${ROOT}/etc/make.profile" ]] &&
  145.         [[ ! -L "${ROOT}/etc/make.profile" ]] ; then
  146.         die -q "${ROOT}/etc/make.profile isn't a symlink"
  147.     else
  148.         set_symlink "${1}" ${force} || die -q "Couldn't set a new symlink"
  149.     fi
  150. }
  151.  
  152. # vim: set ft=eselect :
  153.